package com.lingxu.base.system.manage.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lingxu.base.system.manage.entity.SysRole;
import com.lingxu.base.system.manage.entity.SysUserRole;

import java.util.List;

/**
 * @Description: 用户角色关联表
 * @Author: LingXu
 * @Date:   2021-01-04
 * @Version: V1.0.1
 */
public interface ISysUserRoleService extends IService<SysUserRole> {
    /**
     * 用户角色关联表-分页列表查询
     * @param page 分页信息
     * @param sysUserRole 用户角色关联表
     * @return 用户角色关联表列表
     */
    IPage<SysUserRole> queryPageList(Page<SysUserRole> page, SysUserRole sysUserRole);

    /**
     * 用户角色关联表-列表查询
     * @param sysUserRole 用户角色关联表
     * @return 用户角色关联表列表
     */
    List<SysUserRole> queryList( SysUserRole sysUserRole);

    /**
     * 获取已拥有某角色的用户ids
     * @param roleId
     * @return
     */
    List<String> getRoleHavingUserList(String roleId);

    /**
     * 为角色分配所有用户
     * @param roleId
     */
    void distributeRoleUsersAll(String roleId);

    /**
     * 为角色分配用户
     * @param roleId
     * @param userIds
     */
    void distributeRoleUsers(String roleId, List<String> userIds);

    /**
     * 为角色取消用户
     * @param roleId
     * @param userIds
     */
    Integer cancelRoleUsers(String roleId,String userIds);

    /**
     * 为角色取消用户
     * @param roleId
     */
    Integer cancelRoleUsersAll(String roleId);

    /**
     * 为用户取消角色
     * @param userId
     * @param roleIds
     */
    Integer cancelUserRoles(String userId, String roleIds);

    /**
     * 为用户取消全部角色
     * @param userId
     * @return
     */
    Integer cancelUserRolesAll(String userId);

    /**
     * 为用户分配全部角色
     * @param userId
     */
    void distributeUserRolesAll(String userId);

    /**
     * 为用户分配角色
     * @param userId
     * @param roleIds
     */
    void distributeUserRoles(String userId,  List<String> roleIds);

    List<SysRole> queryListByUserId(String userid);

    List<SysRole> getSysRoleExistByUserid(String userid);

    List<SysRole> getSysRoleNotExistByUserid(String userid);

    List<String> getSysRoleIDExistByUserid(String userid);
}
